//
// @Auther: by wujehy 
// @Email:wujehy@qq.com
// @Data:20-3-14
// @Time:下午4:26
//

#ifndef AUTHORITYCONTROLTEST_STUDENT_H
#define AUTHORITYCONTROLTEST_STUDENT_H

/**
 * @brief 这是 一个 对外公开的 头文件  ,对于第三方使用者 只能进行 限制性的 操作
 * 例如之开放get 操作 但是 不能给外部使用者 使用 set 操作
 * 这样保证了接口的 访问权限,不让别人随便使用造成内部 产生脏数据
 *
 * 权限控制 有几种方案, 这里的是比较常用的方案
 *
 * 在 java 中实现 权限控制的方式是 ,定义 一个 接口 给外部使用 ,内部返回 接口实现的类
 */
#include <iostream>
class Student {
public:
    /**
     * @brief 构造函数
     * @param classroom 填充构造的时候的属性,可变参数
     */
    explicit Student(std::string classroom="myclassroom");

    /**
     * @brief 析钩函数
     */
    virtual ~Student();

    // 开放外部的操作
    const std::string &getName() const;

    int getId() const;

    const std::string &getClassroom() const;

protected:
    // 这些控制可以被 公有继承 ,用于可 控的参数
    std::string m_name;
    int m_id;

private:
    // 私有成员 只有当前 类 可控
    std::string m_classroom;
};


#endif //AUTHORITYCONTROLTEST_STUDENT_H
